441. Лото
В немецком лото следует выбрать 6 чисел из множества {1, 2, …, 49}. Одна
из стратегий игры в лото состоит в том, что выбирается подмножество S Í {1, 2, …, 49}, состоящее
из k чисел (k > 6). После чего в течении нескольких игр выбираются числа только
из S. Например, если k = 8 и S = {1,
2, 3, 5, 8, 13, 21, 34}, то существует 28 разных выборок: [1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34],
[1,2,3,5,13,21], ..., [3,5,8,13,21,34].
В задаче следует для
заданных k и S вывести все возможные
наборы из 6 чисел.
Вход. Состоит из нескольких строк – тестов. Первым в каждой
строке стоит число k (6 < k
< 13). Далее следуют k чисел в возрастающем порядке, из которых состоит
множество S. Последний тест содержит k = 0 и не обрабатывается.
Выход. Для
каждого теста вывести все возможные наборы для игры в лото в лексикографическом
порядке. Каждый набор должен состоять из чисел, принадлежащих S.
7 1 2 3 4 5
6 7
8 1 2 3 5 8
13 21 34
0
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7
1 2 3 5 8
13
1 2 3 5 8
21
1 2 3 5 8
34
1 2 3 5 13
21
1 2 3 5 13
34
1 2 3 5 21
34
1 2 3 8 13
21
1 2 3 8 13
34
1 2 3 8 21
34
1 2 3 13 21
34
1 2 5 8 13
21
1 2 5 8 13
34
1 2 5 8 21
34
1 2 5 13 21
34
1 2 8 13 21
34
1 3 5 8 13
21
1 3 5 8 13
34
1 3 5 8 21
34
1 3 5 13 21
34
1 3 8 13 21
34
1 5 8 13 21
34
2 3 5 8 13
21
2 3 5 8 13
34
2 3 5 8 21
34
2 3 5 13 21
34
2 3 8 13 21
34
2 5 8 13 21
34
3 5 8 13 21
34
перебор
Запомним множество S в
массиве. Далее при помощи вложенного 6 раз цикла for перебираем все шестерки
множества S.
Читаем число k,
заносим элементы множества S в массив m. Перебираем все шестерки чисел, каждое
из которых принадлежит S.
scanf("%d",&k);
for(;;)
{
for(i = 1; i <= k; i++) scanf("%d",&m[i]);
for(i1 = 1; i1 <= k - 5; i1++)
for(i2 = i1 + 1; i2 <= k - 4; i2++)
for(i3 = i2 + 1; i3 <= k - 3; i3++)
for(i4 = i3 + 1; i4 <= k - 2; i4++)
for(i5 = i4 + 1; i5 <= k - 1; i5++)
for(i6 = i5 + 1; i6 <= k; i6++)
printf("%d %d %d %d %d %d\n",m[i1],m[i2],m[i3],m[i4],m[i5],m[i6]);
scanf("%d",&k);
if (!k) break; else printf("\n");
}